{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Network Analysis of Shakespeare and Company and Goodreads"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import functions from graph.py\n",
    "from graph import get_goodreads_graph, get_sc_graph\n",
    "from core_periphery_sbm import core_periphery as cp\n",
    "import networkx as nx\n",
    "from collections import Counter\n",
    "import operator\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get vertex lists, edge weights, vertex to neighbors, and number of nodes\n",
    "sc_books_in_vertex_order, sc_book_to_vertex_index, sc_edge_to_weight, sc_vertex_to_neighbors, sc_n, sc_book_uri_to_num_events, sc_book_uri_to_text, book_uri_to_year, book_uri_to_title, book_uri_to_author = get_sc_graph()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def print_graph_summary(books_in_vertex_order, book_to_vertex_index, edge_to_weight, vertex_to_neighbors, n):\n",
    "    print('# of vertices: {:,}'.format(n))\n",
    "    # all edges are included twice because these are undirected graphs\n",
    "    print('# of unique edges: {:,}'.format(int(len(edge_to_weight)/2)))\n",
    "    print('Total edge weights: {:,}'.format(int(sum(edge_to_weight.values())/2)))\n",
    "\n",
    "    # list the five vertices with highest degree\n",
    "    print('\\nFive books with the most neighbors:')\n",
    "    vertex_to_degree = {v: len(neighbors) for v, neighbors in vertex_to_neighbors.items()}\n",
    "    vertex_to_degree_sorted = sorted(vertex_to_degree.items(), reverse=True, key=operator.itemgetter(1))\n",
    "    for vertex_idx, degree in vertex_to_degree_sorted[:5]:\n",
    "        vertex_book_name = books_in_vertex_order[vertex_idx]\n",
    "        print('{} neighbors: {}'.format(degree, vertex_book_name))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# of vertices: 1,511\n",
      "# of unique edges: 198,115\n",
      "Total edge weights: 267,207\n",
      "\n",
      "Five books with the most neighbors:\n",
      "926 neighbors: The Sun Also Rises by Hemingway, Ernest (1926)\n",
      "915 neighbors: A Portrait of the Artist as a Young Man by Joyce, James (1916)\n",
      "898 neighbors: Dubliners by Joyce, James (1914)\n",
      "881 neighbors: Pointed Roofs (Pilgrimage 1) by Richardson, Dorothy M. (1915)\n",
      "872 neighbors: A Farewell to Arms by Hemingway, Ernest (1929)\n"
     ]
    }
   ],
   "source": [
    "print_graph_summary(sc_books_in_vertex_order, sc_book_to_vertex_index, sc_edge_to_weight, sc_vertex_to_neighbors, sc_n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def tuple_to_list(edge_to_weight):\n",
    "    fill = []\n",
    "    for i in edge_to_weight.items():\n",
    "        l = list(i)\n",
    "        fill.append(l)\n",
    "    edge_to_weight_list = []\n",
    "    for i in fill:\n",
    "        edges = i[0]\n",
    "        listed_edge = list(edges)\n",
    "        listed_edge.append(i[1])\n",
    "        edge_to_weight_list.append(listed_edge)\n",
    "    return edge_to_weight_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_weights_list = tuple_to_list(sc_edge_to_weight)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1491, 0, 1]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# from edge [0] to edge [1], the weight is [2]\n",
    "sc_weights_list[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Shakespeare and Co Analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create SHAKESPEARE AND CO graph\n",
    "sc_G = nx.Graph()\n",
    "sc_G.add_weighted_edges_from(sc_weights_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next chunk is optional: I do this only to make the results more interpretable. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# optional: change vertex ids to book names\n",
    "sc_dict = {value:key for key, value in sc_book_to_vertex_index.items()}\n",
    "mapping = sc_dict # Dictionary from id to title"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_G = nx.relabel_nodes(sc_G, mapping)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Core-Periphery Structure"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This section draws from Gallagher et al.'s [\"A clarified typology of core-periphery structure in networks\"](https://advances.sciencemag.org/content/7/12/eabc9800), with code available [here](https://github.com/ryanjgallagher/core_periphery_sbm). Core-periphery structure studies how networks can be divided into a core of densely interconnected nodes, which are highly connected to other core nodes, and periphery nodes that are connected only to core nodes and not each other. This paper develops/assesses two core-periphery model types: the hub-and-spoke model that divides the network into two clean blocks (core vs. periphery) and a layered model that allows for layers of periphery-ness. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Initialize hub-and-spoke model and infer structure\n",
    "hubspoke = cp.HubSpokeCorePeriphery(n_gibbs=100, n_mcmc=10*len(sc_G))\n",
    "hubspoke.infer(sc_G)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [],
   "source": [
    "layered = cp.LayeredCorePeriphery(n_layers=4, n_gibbs=100, n_mcmc=10*len(sc_G))\n",
    "layered.infer(sc_G)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get core and periphery assignments from hub-and-spoke model\n",
    "node2label_hs = hubspoke.get_labels(last_n_samples=50)\n",
    "\n",
    "# Get layer assignments from the layered model\n",
    "node2label_l = layered.get_labels(last_n_samples=50)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Create dataframes**: the goal is to get this into a nice csv with columns for book title, author, h&s cp label, layered cp label, coreness, and probability."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_hub_spoke_df = pd.DataFrame.from_dict(node2label_hs, orient='index')\n",
    "sc_layered_df = pd.DataFrame.from_dict(node2label_l, orient='index')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Core-Periphery Label:** For both models (hub-and-spoke and layered) the core is 0; for the layered model, the further away from 0 the more peripheral the node. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_layered_probs_df = pd.DataFrame.from_dict(node2probs_l, orient='index')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Coreness**, where the closer to 1 the more core; closer to 0 the more peripheral."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Dictionary of node -> coreness\n",
    "node2coreness_l = layered.get_coreness(last_n_samples=50, return_dict=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_layered_coreness_df = pd.DataFrame.from_dict(node2coreness_l, orient='index')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [],
   "source": [
    "# all books that are especially \"corey\" in the layered model\n",
    "most_core = []\n",
    "for book, coreness in node2coreness_l.items():  # for name, age in dictionary.iteritems():  \n",
    "    if coreness > .92:\n",
    "        most_core.append(book)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['A Farewell to Arms by Hemingway, Ernest (1929)',\n",
       " 'A Handful of Dust by Waugh, Evelyn (1934)',\n",
       " 'A Note in Music by Lehmann, Rosamond (1930)',\n",
       " 'After Many a Summer by Huxley, Aldous (1939)',\n",
       " 'All This and Heaven Too by Field, Rachel (1938)',\n",
       " 'An American Tragedy by Dreiser, Theodore (1925)',\n",
       " 'Angel Pavement by Priestley, J. B. (1930)',\n",
       " 'Antic Hay by Huxley, Aldous (1923)',\n",
       " 'Babbitt by Lewis, Sinclair (1922)',\n",
       " 'Bliss and Other Stories by Mansfield, Katherine (1920)',\n",
       " 'Brave New World by Huxley, Aldous (1932)',\n",
       " 'Buddenbrooks by Mann, Thomas (1924)',\n",
       " \"Busman's Honeymoon by Sayers, Dorothy (1937)\",\n",
       " 'Dead Souls by Gogol, Nikolai (1842)',\n",
       " 'Death of a Hero by Aldington, Richard (1929)',\n",
       " 'Dodsworth by Lewis, Sinclair (1929)',\n",
       " 'Dubliners by Joyce, James (1914)',\n",
       " 'Dusty Answer by Lehmann, Rosamond (1927)',\n",
       " 'Esther Waters by Moore, George (1894)',\n",
       " \"Famine by O'Flaherty, Liam (1937)\",\n",
       " 'Gentlemen Prefer Blondes: The Illuminating Diary of a Professional Lady by Loos, Anita (1925)',\n",
       " 'Gone with the Wind by Mitchell, Margaret (1936)',\n",
       " 'Harriet Hume: A London Fantasy by West, Rebecca (1929)',\n",
       " 'Let the People Sing by Priestley, J. B. (1939)',\n",
       " 'Letters of Jane Austen by Austen, Jane (1884)',\n",
       " 'Light in August by Faulkner, William (1932)',\n",
       " 'Magnolia Street by Golding, Louis (1932)',\n",
       " 'Main Street: The Story of Carol Kennicott by Lewis, Sinclair (1920)',\n",
       " 'Mrs. Dalloway by Woolf, Virginia (1925)',\n",
       " 'Of Human Bondage by Maugham, W. Somerset (1915)',\n",
       " 'Rebecca by Du Maurier, Daphne (1938)',\n",
       " 'Red Sky at Morning by Kennedy, Margaret (1927)',\n",
       " 'Revolving Lights (Pilgrimage 7) by Richardson, Dorothy M. (1923)',\n",
       " 'Sanctuary by Faulkner, William (1931)',\n",
       " 'Scenes of Clerical Life by Eliot, George (1857)',\n",
       " 'So Red the Rose by Young, Stark (1934)',\n",
       " 'Something Childish and Other Stories by Mansfield, Katherine (1924)',\n",
       " 'Sparkenbroke by Morgan, Charles (1936)',\n",
       " 'Staying with Relations by Macaulay, Rose (1930)',\n",
       " 'Summer Lightning by Wodehouse, P. G. (1929)',\n",
       " \"Sylvia's Lovers by Gaskell, Elizabeth (1863)\",\n",
       " 'Thank Heaven Fasting by Delafield, E. M. (1932)',\n",
       " 'The 42nd Parallel by Dos Passos, John (1930)',\n",
       " 'The Ambassadors by James, Henry (1903)',\n",
       " 'The Apes of God by Lewis, Wyndham (1930)',\n",
       " 'The Bertrams by Trollope, Anthony (1859)',\n",
       " 'The Blaze of Noon by Heppenstall, Rayner (1939)',\n",
       " 'The Case of the Lame Canary by Gardner, Erle Stanley (1937)',\n",
       " 'The Constant Nymph by Kennedy, Margaret (1924)',\n",
       " 'The Daring Young Man on the Flying Trapeze by Saroyan, William (1934)',\n",
       " 'The Death of the Heart by Bowen, Elizabeth (1938)',\n",
       " 'The Duchess of Wrexe, Her Decline and Death: A Romantic Commentary by Walpole, Hugh (1924)',\n",
       " 'The Expedition of Humphry Clinker by Smollett, Tobias (1771)',\n",
       " 'The Fruit of the Tree by Wharton, Edith (1907)',\n",
       " 'The Good Earth by Buck, Pearl S. (1931)',\n",
       " 'The House in Paris by Bowen, Elizabeth (1935)',\n",
       " 'The Judge by West, Rebecca (1922)',\n",
       " 'The Ladies of Lyndon by Kennedy, Margaret (1923)',\n",
       " 'The Leavenworth Case by Green, Anna Katharine (1878)',\n",
       " 'The Long Valley by Steinbeck, John (1938)',\n",
       " 'The Longest Journey by Forster, E. M. (1907)',\n",
       " 'The Ordeal of Richard Feverel by Meredith, George (1859)',\n",
       " 'The Problem of the Green Capsule by Carr, John Dickson (1939)',\n",
       " 'The Prodigal Parents by Lewis, Sinclair (1938)',\n",
       " 'The Rainbow by Lawrence, D. H. (1915)',\n",
       " 'The Rains Came by Bromfield, Louis (1937)',\n",
       " 'The Seven Who Fled by Prokosch, Frederic (1937)',\n",
       " 'The Stars Look Down by Cronin, A. J. (1935)',\n",
       " 'The Voyage Out by Woolf, Virginia (1915)',\n",
       " 'The Water Gipsies by Herbert, A. P. (1930)',\n",
       " 'The Well of Loneliness by Hall, Radclyffe (1926)',\n",
       " 'The White Paternoster and Other Stories by Powys, Theodore Francis (1930)',\n",
       " 'Tobacco Road by Caldwell, Erskine Preston (1932)',\n",
       " 'Twilight Sleep by Wharton, Edith (1927)',\n",
       " 'Unnatural Death by Sayers, Dorothy (1927)',\n",
       " 'With Malice Toward Some by Halsey, Margaret (1938)']"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "most_core"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Save to csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_layered_df['book_info'] = sc_layered_df.index\n",
    "sc_layered_df = sc_layered_df.rename(columns={0: \"layer\"})\n",
    "sc_hub_spoke_df['book_info'] = sc_hub_spoke_df.index\n",
    "sc_hub_spoke_df = sc_hub_spoke_df.rename(columns={0: \"hub_and_spoke\"})\n",
    "sc_layered_coreness_df['book_info'] = sc_layered_coreness_df.index\n",
    "sc_layered_coreness_df = sc_layered_coreness_df.rename(columns={0: \"coreness\"})\n",
    "full_sc_df = sc_layered_df.merge(sc_hub_spoke_df, how='inner', on='book_info').merge(sc_layered_coreness_df, how='inner', on='book_info')\n",
    "full_sc_df = full_sc_df[[\"book_info\", \"hub_and_spoke\", \"layer\", \"coreness\"]]\n",
    "vertex_title = pd.DataFrame.from_dict(sc_dict, orient = \"index\")\n",
    "vertex_title[\"vertex\"] = vertex_title.index\n",
    "vertex_title = vertex_title.rename(columns={0: \"book_info\"})\n",
    "full_sc_df = full_sc_df.merge(vertex_title, how='inner', on='book_info')\n",
    "full_sc_df = full_sc_df[[\"vertex\",\"book_info\", \"layer\", \"hub_and_spoke\", \"coreness\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [],
   "source": [
    "#full_sc_df.to_csv(\"shakespeare-co-core-periphery.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "#full_sc_df = pd.read_csv(\"shakespeare-co-core-periphery.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({2: 197, 0: 231, 1: 146, 3: 371, 4: 566})"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Counter(full_sc_df[\"layer\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Other metrics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Density"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shakespeare and Co Network Density: 0.17366245765051871\n"
     ]
    }
   ],
   "source": [
    "sc_density = nx.density(sc_G)\n",
    "print(\"Shakespeare and Co Network Density:\", sc_density)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Transitivity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Triadic closure for S&C: 0.6160527307976547\n"
     ]
    }
   ],
   "source": [
    "triadic_closure = nx.transitivity(sc_G)\n",
    "print(\"Triadic closure for S&C:\", triadic_closure)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Diameter length "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Network diameter of Shakespeare and Co's largest component: 5\n"
     ]
    }
   ],
   "source": [
    "# Get the largest connected component of the graph\n",
    "components = nx.connected_components(sc_G)\n",
    "largest_component = max(components, key=len)\n",
    "\n",
    "# Create a \"subgraph\" of the largest component and find diameter\n",
    "subgraph = sc_G.subgraph(largest_component)\n",
    "diameter = nx.diameter(subgraph)\n",
    "print(\"Network diameter of Shakespeare and Co's largest component:\", diameter)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Centrality Measures\n",
    "There are multiple ways to assess centrality in a network. Centrality measures usually try to capture something similar to significance or importance in a network--but there are different ways to understand importance. This code looks at the following:\n",
    "- **degree centrality:** the sum of all of a node's edges. When considering S&C, a book with the highest number of degrees demonstrates that it was the book most often read with other books in the network. This is a measure of a type of popularity (*but remember -> this isn't the book checked out the most times, it's the book checked out the most times with any other book*).  \n",
    "- **betweeness centrality:** betweenness centrality disregards node degree, and instead focuses on path length for determining the most important nodes. This looks at shortest paths to figure out which nodes connect otherwise disparate parts of the network. \n",
    "- **eigenvector centrality:** eigenvector centrality accounts for whether or not a node is connected to many other high-degree nodes--this would make it a hub, and also accounts for a central node that may not have the highest # of degrees, but is highly important, regardless"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top 100 nodes by degree in S&C:\n",
      "('The Sun Also Rises by Hemingway, Ernest (1926)', 926)\n",
      "('A Portrait of the Artist as a Young Man by Joyce, James (1916)', 915)\n",
      "('Dubliners by Joyce, James (1914)', 898)\n",
      "('Pointed Roofs (Pilgrimage 1) by Richardson, Dorothy M. (1915)', 881)\n",
      "('A Farewell to Arms by Hemingway, Ernest (1929)', 872)\n",
      "('Sanctuary by Faulkner, William (1931)', 862)\n",
      "('Manhattan Transfer by Dos Passos, John (1925)', 861)\n",
      "('The Garden Party and Other Stories by Mansfield, Katherine (1922)', 857)\n",
      "('Eyeless in Gaza by Huxley, Aldous (1936)', 856)\n",
      "('To the Lighthouse by Woolf, Virginia (1927)', 853)\n",
      "('Mrs. Dalloway by Woolf, Virginia (1925)', 839)\n",
      "('Mr. Norris Changes Trains by Isherwood, Christopher (1935)', 836)\n",
      "('The Citadel by Cronin, A. J. (1937)', 834)\n",
      "('The Rains Came by Bromfield, Louis (1937)', 826)\n",
      "('Exiles by Joyce, James (1918)', 822)\n",
      "('An American Tragedy by Dreiser, Theodore (1925)', 821)\n",
      "('The Years by Woolf, Virginia (1937)', 816)\n",
      "('The Waves by Woolf, Virginia (1931)', 816)\n",
      "('Bliss and Other Stories by Mansfield, Katherine (1920)', 813)\n",
      "('Point Counter Point by Huxley, Aldous (1928)', 812)\n"
     ]
    }
   ],
   "source": [
    "# degree centrality\n",
    "sc_degree_dict = dict(sc_G.degree(sc_G.nodes()))\n",
    "nx.set_node_attributes(sc_G, sc_degree_dict, 'degree')\n",
    "\n",
    "sc_sorted_degree = sorted(sc_degree_dict.items(), key=itemgetter(1), reverse=True)\n",
    "print(\"Top 100 nodes by degree in S&C:\")\n",
    "for d in sc_sorted_degree[:20]:\n",
    "    print(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_degree_df = pd.DataFrame.from_dict(sc_degree_dict, orient='index')\n",
    "sc_degree_df[\"book_info\"] = sc_degree_df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_degree_df = sc_degree_df.rename(columns={0: \"degree_centrality\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top 20 S&C nodes by betweenness centrality:\n",
      "('A Portrait of the Artist as a Young Man by Joyce, James (1916)', 0.014924835032906583)\n",
      "('Dubliners by Joyce, James (1914)', 0.010156046367298105)\n",
      "('Pointed Roofs (Pilgrimage 1) by Richardson, Dorothy M. (1915)', 0.008879411450326712)\n",
      "('Mr. Norris Changes Trains by Isherwood, Christopher (1935)', 0.00883794691974864)\n",
      "('The Sun Also Rises by Hemingway, Ernest (1926)', 0.008235339008884771)\n",
      "('Moby-Dick; Or, the Whale by Melville, Herman (1851)', 0.008034408237163468)\n",
      "('The Garden Party and Other Stories by Mansfield, Katherine (1922)', 0.008031697753147465)\n",
      "('Exiles by Joyce, James (1918)', 0.00738764971447236)\n",
      "('Manhattan Transfer by Dos Passos, John (1925)', 0.007156264192218229)\n",
      "('Sister Carrie by Dreiser, Theodore (1900)', 0.006408263758941081)\n",
      "('Bliss and Other Stories by Mansfield, Katherine (1920)', 0.006177860270808386)\n",
      "('The Way of All Flesh by Butler, Samuel (1903)', 0.006108800015310316)\n",
      "('Of Human Bondage by Maugham, W. Somerset (1915)', 0.00608543689910433)\n",
      "('The Bridge of San Luis Rey by Wilder, Thornton (1927)', 0.005870533392196489)\n",
      "('Murder in the Cathedral by Eliot, T. S. (1935)', 0.005859305900960767)\n",
      "('Three Lives by Stein, Gertrude (1909)', 0.0056973897040949375)\n",
      "('A Farewell to Arms by Hemingway, Ernest (1929)', 0.005449375349350303)\n",
      "('Sons and Lovers by Lawrence, D. H. (1913)', 0.005444880808383907)\n",
      "('Sanctuary by Faulkner, William (1931)', 0.005251203957641526)\n",
      "(\"The Emperor Jones by O'Neill, Eugene (1921)\", 0.004792576851659059)\n"
     ]
    }
   ],
   "source": [
    "# betweenness centrality\n",
    "betweenness_dict = nx.betweenness_centrality(sc_G) # Run betweenness centrality\n",
    "# Assign each to an attribute in your network\n",
    "nx.set_node_attributes(sc_G, betweenness_dict, 'betweenness')\n",
    "\n",
    "sorted_betweenness = sorted(betweenness_dict.items(), key=itemgetter(1), reverse=True)\n",
    "\n",
    "print(\"Top 20 S&C nodes by betweenness centrality:\")\n",
    "for b in sorted_betweenness[:20]:\n",
    "    print(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_between_df = pd.DataFrame.from_dict(betweenness_dict, orient='index')\n",
    "sc_between_df[\"book_info\"] = sc_between_df.index\n",
    "\n",
    "sc_between_df = sc_between_df.rename(columns={0: \"between_centrality\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top 20 S&C nodes by eigenvector centrality:\n",
      "('The Sun Also Rises by Hemingway, Ernest (1926)', 0.055801125995367726)\n",
      "('Eyeless in Gaza by Huxley, Aldous (1936)', 0.05548865989154352)\n",
      "('Mrs. Dalloway by Woolf, Virginia (1925)', 0.05516511583917018)\n",
      "('A Farewell to Arms by Hemingway, Ernest (1929)', 0.055121774229754)\n",
      "('To the Lighthouse by Woolf, Virginia (1927)', 0.054963118299115946)\n",
      "('Sanctuary by Faulkner, William (1931)', 0.05472684041384402)\n",
      "('The Citadel by Cronin, A. J. (1937)', 0.054447706240786826)\n",
      "('Sparkenbroke by Morgan, Charles (1936)', 0.054380357944984005)\n",
      "(\"Axel's Castle: A Study in the Imaginative Literature of 1870 – 1930 by Wilson, Edmund (1931)\", 0.054352362709488754)\n",
      "('The Death of the Heart by Bowen, Elizabeth (1938)', 0.05426823855787121)\n",
      "('The Waves by Woolf, Virginia (1931)', 0.05420492470624962)\n",
      "('The Rains Came by Bromfield, Louis (1937)', 0.05416759259919326)\n",
      "('An American Tragedy by Dreiser, Theodore (1925)', 0.05413418327159532)\n",
      "('Manhattan Transfer by Dos Passos, John (1925)', 0.054053134110266236)\n",
      "('The Years by Woolf, Virginia (1937)', 0.05390432804601168)\n",
      "('The Garden Party and Other Stories by Mansfield, Katherine (1922)', 0.05377552091149242)\n",
      "('Point Counter Point by Huxley, Aldous (1928)', 0.05363321090771619)\n",
      "('South Riding: An English Landscape by Holtby, Winifred (1936)', 0.053507199245409594)\n",
      "('Antic Hay by Huxley, Aldous (1923)', 0.05337493843151871)\n",
      "('The Well of Loneliness by Hall, Radclyffe (1926)', 0.05328168292356208)\n"
     ]
    }
   ],
   "source": [
    "# eigenvector centrality\n",
    "eigenvector_dict = nx.eigenvector_centrality(sc_G) # Run eigenvector centrality\n",
    "nx.set_node_attributes(sc_G, eigenvector_dict, 'eigenvector')\n",
    "\n",
    "sorted_eigenvector = sorted(eigenvector_dict.items(), key=itemgetter(1), reverse=True)\n",
    "\n",
    "print(\"Top 20 S&C nodes by eigenvector centrality:\")\n",
    "for b in sorted_eigenvector[:20]:\n",
    "    print(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_eigenvector_df = pd.DataFrame.from_dict(eigenvector_dict, orient='index')\n",
    "sc_eigenvector_df[\"book_info\"] = sc_eigenvector_df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_eigenvector_df = sc_eigenvector_df.rename(columns={0: \"eigenvector_centrality\"})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Combine all"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [],
   "source": [
    "full_sc_df = full_sc_df.merge(sc_degree_df, how='inner', on='book_info').merge(sc_between_df, how='inner', on='book_info').merge(sc_eigenvector_df, how='inner', on='book_info')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>vertex</th>\n",
       "      <th>book_info</th>\n",
       "      <th>layer</th>\n",
       "      <th>hub_and_spoke</th>\n",
       "      <th>coreness</th>\n",
       "      <th>degree_centrality</th>\n",
       "      <th>between_centrality</th>\n",
       "      <th>eigenvector_centrality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1292</td>\n",
       "      <td>1914 and Other Poems by Brooke, Rupert (1915)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.026667</td>\n",
       "      <td>9</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000335</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>966</td>\n",
       "      <td>1919 by Dos Passos, John (1932)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.913333</td>\n",
       "      <td>627</td>\n",
       "      <td>0.001662</td>\n",
       "      <td>0.045174</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>128</td>\n",
       "      <td>A Backward Glance by Wharton, Edith (1934)</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0.340000</td>\n",
       "      <td>235</td>\n",
       "      <td>0.000264</td>\n",
       "      <td>0.015205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1044</td>\n",
       "      <td>A Book of Nonsense by Lear, Edward (1846)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.006667</td>\n",
       "      <td>13</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1088</td>\n",
       "      <td>A Child's Garden of Verses by Stevenson, Rober...</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0.253333</td>\n",
       "      <td>119</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.007940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>175</td>\n",
       "      <td>A Christmas Garland by Beerbohm, Max (1912)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.026667</td>\n",
       "      <td>97</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0.006165</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>914</td>\n",
       "      <td>A City of Bells by Goudge, Elizabeth (1936)</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.620000</td>\n",
       "      <td>336</td>\n",
       "      <td>0.000219</td>\n",
       "      <td>0.026609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>286</td>\n",
       "      <td>A Connecticut Yankee in King Arthur's Court by...</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>11</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>841</td>\n",
       "      <td>A Crystal Age by Hudson, W. H. (1887)</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0.320000</td>\n",
       "      <td>188</td>\n",
       "      <td>0.000135</td>\n",
       "      <td>0.011854</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>322</td>\n",
       "      <td>A Daughter of the Samurai by Sugimoto, Etsuko ...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.646667</td>\n",
       "      <td>391</td>\n",
       "      <td>0.000215</td>\n",
       "      <td>0.030789</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   vertex                                          book_info  layer  \\\n",
       "0    1292      1914 and Other Poems by Brooke, Rupert (1915)      3   \n",
       "1     966                    1919 by Dos Passos, John (1932)      0   \n",
       "2     128         A Backward Glance by Wharton, Edith (1934)      2   \n",
       "3    1044          A Book of Nonsense by Lear, Edward (1846)      3   \n",
       "4    1088  A Child's Garden of Verses by Stevenson, Rober...      2   \n",
       "5     175        A Christmas Garland by Beerbohm, Max (1912)      3   \n",
       "6     914        A City of Bells by Goudge, Elizabeth (1936)      1   \n",
       "7     286  A Connecticut Yankee in King Arthur's Court by...      3   \n",
       "8     841              A Crystal Age by Hudson, W. H. (1887)      2   \n",
       "9     322  A Daughter of the Samurai by Sugimoto, Etsuko ...      1   \n",
       "\n",
       "   hub_and_spoke  coreness  degree_centrality  between_centrality  \\\n",
       "0              1  0.026667                  9            0.000000   \n",
       "1              0  0.913333                627            0.001662   \n",
       "2              1  0.340000                235            0.000264   \n",
       "3              1  0.006667                 13            0.000000   \n",
       "4              1  0.253333                119            0.000000   \n",
       "5              1  0.026667                 97            0.000031   \n",
       "6              0  0.620000                336            0.000219   \n",
       "7              1  0.000000                 11            0.000000   \n",
       "8              1  0.320000                188            0.000135   \n",
       "9              0  0.646667                391            0.000215   \n",
       "\n",
       "   eigenvector_centrality  \n",
       "0                0.000335  \n",
       "1                0.045174  \n",
       "2                0.015205  \n",
       "3                0.000778  \n",
       "4                0.007940  \n",
       "5                0.006165  \n",
       "6                0.026609  \n",
       "7                0.000819  \n",
       "8                0.011854  \n",
       "9                0.030789  "
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_sc_df.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [],
   "source": [
    "full_sc_df.to_csv(\"shakespeare-co-core-periphery.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Top Users"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_file = 'shakespeare-co-core-periphery.csv'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_df = pd.read_csv(sc_file)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "uri_to_text = pd.DataFrame.from_dict(sc_book_uri_to_text, orient = \"index\").reset_index()\n",
    "uri_to_text = uri_to_text.rename(columns = {\"index\":\"uri\", 0: \"sc_info\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uri</th>\n",
       "      <th>sc_info</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/m...</td>\n",
       "      <td>Le Morte d'Arthur by Malory, Thomas (1485)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/m...</td>\n",
       "      <td>Utopia by More, Thomas (1516)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/n...</td>\n",
       "      <td>Gorboduc by Norton, Thomas (1561)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/l...</td>\n",
       "      <td>Euphues: The Anatomy of Wit by Lyly, John (1578)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/s...</td>\n",
       "      <td>The Shepheard's Calendar by Spenser, Edmund (1...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6013</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/u...</td>\n",
       "      <td>[unclear]ile</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6014</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/u...</td>\n",
       "      <td>[unclear]ism</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6015</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/u...</td>\n",
       "      <td>[unclear]y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6016</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/u...</td>\n",
       "      <td>[unidentified Benn’s Library]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6017</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/u...</td>\n",
       "      <td>[unknown]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>6018 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                    uri  \\\n",
       "0     https://shakespeareandco.princeton.edu/books/m...   \n",
       "1     https://shakespeareandco.princeton.edu/books/m...   \n",
       "2     https://shakespeareandco.princeton.edu/books/n...   \n",
       "3     https://shakespeareandco.princeton.edu/books/l...   \n",
       "4     https://shakespeareandco.princeton.edu/books/s...   \n",
       "...                                                 ...   \n",
       "6013  https://shakespeareandco.princeton.edu/books/u...   \n",
       "6014  https://shakespeareandco.princeton.edu/books/u...   \n",
       "6015  https://shakespeareandco.princeton.edu/books/u...   \n",
       "6016  https://shakespeareandco.princeton.edu/books/u...   \n",
       "6017  https://shakespeareandco.princeton.edu/books/u...   \n",
       "\n",
       "                                                sc_info  \n",
       "0            Le Morte d'Arthur by Malory, Thomas (1485)  \n",
       "1                         Utopia by More, Thomas (1516)  \n",
       "2                     Gorboduc by Norton, Thomas (1561)  \n",
       "3      Euphues: The Anatomy of Wit by Lyly, John (1578)  \n",
       "4     The Shepheard's Calendar by Spenser, Edmund (1...  \n",
       "...                                                 ...  \n",
       "6013                                       [unclear]ile  \n",
       "6014                                       [unclear]ism  \n",
       "6015                                         [unclear]y  \n",
       "6016                      [unidentified Benn’s Library]  \n",
       "6017                                          [unknown]  \n",
       "\n",
       "[6018 rows x 2 columns]"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "uri_to_text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df = sc_df.merge(uri_to_text, left_on = \"book_info\", right_on = \"sc_info\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc_borrower_to_books = get_sc_borrower_to_books()\n",
    "\n",
    "killen = 'https://shakespeareandco.princeton.edu/members/killen/'\n",
    "raphael = 'https://shakespeareandco.princeton.edu/members/raphael-france/'\n",
    "de_marcilly = 'https://shakespeareandco.princeton.edu/members/marcilly/'\n",
    "\n",
    "killen_books = sc_borrower_to_books[killen]\n",
    "raphael_books = sc_borrower_to_books[raphael]\n",
    "de_marcilly_books = sc_borrower_to_books[de_marcilly]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "killen_df = pd.DataFrame.from_dict(killen_books)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "killen_df[\"killen\"] = 1\n",
    "killen_df = killen_df.rename(columns={0:\"uri\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uri</th>\n",
       "      <th>killen</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/r...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/f...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>216</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/b...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/w...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>138</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/c...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   uri  killen\n",
       "13   https://shakespeareandco.princeton.edu/books/r...       1\n",
       "174  https://shakespeareandco.princeton.edu/books/f...       1\n",
       "216  https://shakespeareandco.princeton.edu/books/b...       1\n",
       "124  https://shakespeareandco.princeton.edu/books/w...       1\n",
       "138  https://shakespeareandco.princeton.edu/books/c...       1"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "killen_df.sample(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uri</th>\n",
       "      <th>raphael</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/m...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/m...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/l...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/c...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>251</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/b...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   uri  raphael\n",
       "87   https://shakespeareandco.princeton.edu/books/m...        1\n",
       "122  https://shakespeareandco.princeton.edu/books/m...        1\n",
       "80   https://shakespeareandco.princeton.edu/books/l...        1\n",
       "222  https://shakespeareandco.princeton.edu/books/c...        1\n",
       "251  https://shakespeareandco.princeton.edu/books/b...        1"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "raphael_df = pd.DataFrame.from_dict(raphael_books)\n",
    "raphael_df[\"raphael\"] = 1\n",
    "raphael_df = raphael_df.rename(columns={0:\"uri\"})\n",
    "raphael_df.sample(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(169, 2)"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "de_marcilly_df = pd.DataFrame.from_dict(de_marcilly_books)\n",
    "de_marcilly_df[\"de_marcilly\"] = 1\n",
    "de_marcilly_df = de_marcilly_df.rename(columns={0:\"uri\"})\n",
    "de_marcilly_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df['de_marcilly_match'] = 0\n",
    "new_df.loc[new_df['uri'].isin(de_marcilly_df['uri']), 'de_marcilly_match'] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({1: 169, 0: 1342})"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from collections import Counter\n",
    "Counter(new_df['de_marcilly_match'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df['killen_match'] = 0\n",
    "new_df.loc[new_df['uri'].isin(killen_df['uri']), 'killen_match'] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({0: 1134, 1: 377})"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from collections import Counter\n",
    "Counter(new_df['killen_match'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df['raphael_match'] = 0\n",
    "new_df.loc[new_df['uri'].isin(raphael_df['uri']), 'raphael_match'] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({1: 283, 0: 1228})"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Counter(new_df['raphael_match'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>vertex</th>\n",
       "      <th>book_info</th>\n",
       "      <th>layer</th>\n",
       "      <th>hub_and_spoke</th>\n",
       "      <th>coreness</th>\n",
       "      <th>degree_centrality</th>\n",
       "      <th>between_centrality</th>\n",
       "      <th>eigenvector_centrality</th>\n",
       "      <th>events</th>\n",
       "      <th>Unnamed: 10</th>\n",
       "      <th>Unnamed: 11</th>\n",
       "      <th>Unnamed: 12</th>\n",
       "      <th>uri</th>\n",
       "      <th>sc_info</th>\n",
       "      <th>killen_match</th>\n",
       "      <th>raphael_match</th>\n",
       "      <th>de_marcilly_match</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>592</th>\n",
       "      <td>671</td>\n",
       "      <td>973</td>\n",
       "      <td>Peking Picnic by Bridge, Ann (1932)</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.475</td>\n",
       "      <td>378</td>\n",
       "      <td>0.000319</td>\n",
       "      <td>2.933378e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/o...</td>\n",
       "      <td>Peking Picnic by Bridge, Ann (1932)</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>707</td>\n",
       "      <td>1403</td>\n",
       "      <td>Precious Bane: A Novel by Webb, Mary (1924)</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.510</td>\n",
       "      <td>512</td>\n",
       "      <td>0.001094</td>\n",
       "      <td>3.573663e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/w...</td>\n",
       "      <td>Precious Bane: A Novel by Webb, Mary (1924)</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1193</th>\n",
       "      <td>1477</td>\n",
       "      <td>820</td>\n",
       "      <td>Whom God Hath Joined by Bennett, Arnold (1906)</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.070</td>\n",
       "      <td>60</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.984067e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/b...</td>\n",
       "      <td>Whom God Hath Joined by Bennett, Arnold (1906)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1456</th>\n",
       "      <td>1342</td>\n",
       "      <td>118</td>\n",
       "      <td>The Vodi by Braine, John (1959)</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.020</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.230000e-07</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/b...</td>\n",
       "      <td>The Vodi by Braine, John (1959)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1198</th>\n",
       "      <td>555</td>\n",
       "      <td>1373</td>\n",
       "      <td>Men in War by Latzko, Andreas (1918)</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.055</td>\n",
       "      <td>59</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.088599e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/l...</td>\n",
       "      <td>Men in War by Latzko, Andreas (1918)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>256</th>\n",
       "      <td>593</td>\n",
       "      <td>573</td>\n",
       "      <td>Murder in Mesopotamia by Christie, Agatha (1936)</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.480</td>\n",
       "      <td>490</td>\n",
       "      <td>0.001052</td>\n",
       "      <td>3.145265e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/c...</td>\n",
       "      <td>Murder in Mesopotamia by Christie, Agatha (1936)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>768</th>\n",
       "      <td>900</td>\n",
       "      <td>597</td>\n",
       "      <td>The Bridge by Crane, Hart (1930)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.225</td>\n",
       "      <td>156</td>\n",
       "      <td>0.000144</td>\n",
       "      <td>1.016877e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/c...</td>\n",
       "      <td>The Bridge by Crane, Hart (1930)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>810</th>\n",
       "      <td>1412</td>\n",
       "      <td>188</td>\n",
       "      <td>Tortilla Flat by Steinbeck, John (1935)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.225</td>\n",
       "      <td>168</td>\n",
       "      <td>0.000120</td>\n",
       "      <td>1.208701e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/s...</td>\n",
       "      <td>Tortilla Flat by Steinbeck, John (1935)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>508</th>\n",
       "      <td>625</td>\n",
       "      <td>1413</td>\n",
       "      <td>Nonsense Novels by Leacock, Stephen (1920)</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.095</td>\n",
       "      <td>125</td>\n",
       "      <td>0.000417</td>\n",
       "      <td>6.747020e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/l...</td>\n",
       "      <td>Nonsense Novels by Leacock, Stephen (1920)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>814</th>\n",
       "      <td>1415</td>\n",
       "      <td>760</td>\n",
       "      <td>Travels with a Donkey in the Cévennes by Steve...</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.250</td>\n",
       "      <td>191</td>\n",
       "      <td>0.000117</td>\n",
       "      <td>1.292122e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/s...</td>\n",
       "      <td>Travels with a Donkey in the Cévennes by Steve...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1344</th>\n",
       "      <td>679</td>\n",
       "      <td>335</td>\n",
       "      <td>Pictures from Italy by Dickens, Charles (1846)</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.030</td>\n",
       "      <td>9</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.627670e-04</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/d...</td>\n",
       "      <td>Pictures from Italy by Dickens, Charles (1846)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>639</th>\n",
       "      <td>1030</td>\n",
       "      <td>589</td>\n",
       "      <td>The Ghost by Bennett, Arnold (1907)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.275</td>\n",
       "      <td>226</td>\n",
       "      <td>0.000255</td>\n",
       "      <td>1.442468e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/b...</td>\n",
       "      <td>The Ghost by Bennett, Arnold (1907)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1285</th>\n",
       "      <td>267</td>\n",
       "      <td>927</td>\n",
       "      <td>Easter and Other Plays by Strindberg, August (...</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.035</td>\n",
       "      <td>59</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.088599e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/s...</td>\n",
       "      <td>Easter and Other Plays by Strindberg, August (...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1202</th>\n",
       "      <td>1178</td>\n",
       "      <td>794</td>\n",
       "      <td>The Narrow Land: Folk Chronicles of Old Cape C...</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.055</td>\n",
       "      <td>17</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.158340e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/r...</td>\n",
       "      <td>The Narrow Land: Folk Chronicles of Old Cape C...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>499</th>\n",
       "      <td>755</td>\n",
       "      <td>57</td>\n",
       "      <td>Salomé by Wilde, Oscar (1891)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.230</td>\n",
       "      <td>152</td>\n",
       "      <td>0.000423</td>\n",
       "      <td>8.915872e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/w...</td>\n",
       "      <td>Salomé by Wilde, Oscar (1891)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>944</td>\n",
       "      <td>1031</td>\n",
       "      <td>The Country House by Galsworthy, John (1907)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.885</td>\n",
       "      <td>609</td>\n",
       "      <td>0.003066</td>\n",
       "      <td>4.356352e-02</td>\n",
       "      <td>12.0</td>\n",
       "      <td>killen</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/g...</td>\n",
       "      <td>The Country House by Galsworthy, John (1907)</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>242</th>\n",
       "      <td>795</td>\n",
       "      <td>306</td>\n",
       "      <td>So Red the Rose by Young, Stark (1934)</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.855</td>\n",
       "      <td>610</td>\n",
       "      <td>0.001095</td>\n",
       "      <td>4.830350e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/y...</td>\n",
       "      <td>So Red the Rose by Young, Stark (1934)</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>729</th>\n",
       "      <td>910</td>\n",
       "      <td>1204</td>\n",
       "      <td>The Caravaners by Arnim, Elizabeth von (1909)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.210</td>\n",
       "      <td>120</td>\n",
       "      <td>0.000174</td>\n",
       "      <td>8.555437e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/a...</td>\n",
       "      <td>The Caravaners by Arnim, Elizabeth von (1909)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>202</th>\n",
       "      <td>774</td>\n",
       "      <td>274</td>\n",
       "      <td>Sense and Sensibility by Austen, Jane (1811)</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.290</td>\n",
       "      <td>316</td>\n",
       "      <td>0.001251</td>\n",
       "      <td>1.725234e-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/a...</td>\n",
       "      <td>Sense and Sensibility by Austen, Jane (1811)</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1261</th>\n",
       "      <td>1021</td>\n",
       "      <td>567</td>\n",
       "      <td>The Future of an Illusion by Freud, Sigmund (1...</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.040</td>\n",
       "      <td>31</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.919954e-03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/f...</td>\n",
       "      <td>The Future of an Illusion by Freud, Sigmund (1...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Unnamed: 0  vertex                                          book_info  \\\n",
       "592          671     973                Peking Picnic by Bridge, Ann (1932)   \n",
       "244          707    1403        Precious Bane: A Novel by Webb, Mary (1924)   \n",
       "1193        1477     820     Whom God Hath Joined by Bennett, Arnold (1906)   \n",
       "1456        1342     118                    The Vodi by Braine, John (1959)   \n",
       "1198         555    1373               Men in War by Latzko, Andreas (1918)   \n",
       "256          593     573   Murder in Mesopotamia by Christie, Agatha (1936)   \n",
       "768          900     597                   The Bridge by Crane, Hart (1930)   \n",
       "810         1412     188            Tortilla Flat by Steinbeck, John (1935)   \n",
       "508          625    1413         Nonsense Novels by Leacock, Stephen (1920)   \n",
       "814         1415     760  Travels with a Donkey in the Cévennes by Steve...   \n",
       "1344         679     335     Pictures from Italy by Dickens, Charles (1846)   \n",
       "639         1030     589                The Ghost by Bennett, Arnold (1907)   \n",
       "1285         267     927  Easter and Other Plays by Strindberg, August (...   \n",
       "1202        1178     794  The Narrow Land: Folk Chronicles of Old Cape C...   \n",
       "499          755      57                      Salomé by Wilde, Oscar (1891)   \n",
       "71           944    1031       The Country House by Galsworthy, John (1907)   \n",
       "242          795     306             So Red the Rose by Young, Stark (1934)   \n",
       "729          910    1204      The Caravaners by Arnim, Elizabeth von (1909)   \n",
       "202          774     274       Sense and Sensibility by Austen, Jane (1811)   \n",
       "1261        1021     567  The Future of an Illusion by Freud, Sigmund (1...   \n",
       "\n",
       "      layer  hub_and_spoke  coreness  degree_centrality  between_centrality  \\\n",
       "592       2              0     0.475                378            0.000319   \n",
       "244       2              0     0.510                512            0.001094   \n",
       "1193      4              1     0.070                 60            0.000000   \n",
       "1456      4              1     0.020                  3            0.000000   \n",
       "1198      4              1     0.055                 59            0.000000   \n",
       "256       2              0     0.480                490            0.001052   \n",
       "768       3              1     0.225                156            0.000144   \n",
       "810       3              1     0.225                168            0.000120   \n",
       "508       4              1     0.095                125            0.000417   \n",
       "814       3              1     0.250                191            0.000117   \n",
       "1344      4              1     0.030                  9            0.000000   \n",
       "639       3              1     0.275                226            0.000255   \n",
       "1285      4              1     0.035                 59            0.000000   \n",
       "1202      4              1     0.055                 17            0.000000   \n",
       "499       3              1     0.230                152            0.000423   \n",
       "71        0              0     0.885                609            0.003066   \n",
       "242       1              0     0.855                610            0.001095   \n",
       "729       3              1     0.210                120            0.000174   \n",
       "202       3              1     0.290                316            0.001251   \n",
       "1261      4              1     0.040                 31            0.000000   \n",
       "\n",
       "      eigenvector_centrality  events Unnamed: 10  Unnamed: 11 Unnamed: 12  \\\n",
       "592             2.933378e-02     NaN         NaN          NaN         NaN   \n",
       "244             3.573663e-02     NaN         NaN          NaN         NaN   \n",
       "1193            3.984067e-03     NaN         NaN          NaN         NaN   \n",
       "1456            1.230000e-07     NaN         NaN          NaN         NaN   \n",
       "1198            3.088599e-03     NaN         NaN          NaN         NaN   \n",
       "256             3.145265e-02     NaN         NaN          NaN         NaN   \n",
       "768             1.016877e-02     NaN         NaN          NaN         NaN   \n",
       "810             1.208701e-02     NaN         NaN          NaN         NaN   \n",
       "508             6.747020e-03     NaN         NaN          NaN         NaN   \n",
       "814             1.292122e-02     NaN         NaN          NaN         NaN   \n",
       "1344            5.627670e-04     NaN         NaN          NaN         NaN   \n",
       "639             1.442468e-02     NaN         NaN          NaN         NaN   \n",
       "1285            3.088599e-03     NaN         NaN          NaN         NaN   \n",
       "1202            1.158340e-03     NaN         NaN          NaN         NaN   \n",
       "499             8.915872e-03     NaN         NaN          NaN         NaN   \n",
       "71              4.356352e-02    12.0      killen          NaN         NaN   \n",
       "242             4.830350e-02     NaN         NaN          NaN         NaN   \n",
       "729             8.555437e-03     NaN         NaN          NaN         NaN   \n",
       "202             1.725234e-02     NaN         NaN          NaN         NaN   \n",
       "1261            1.919954e-03     NaN         NaN          NaN         NaN   \n",
       "\n",
       "                                                    uri  \\\n",
       "592   https://shakespeareandco.princeton.edu/books/o...   \n",
       "244   https://shakespeareandco.princeton.edu/books/w...   \n",
       "1193  https://shakespeareandco.princeton.edu/books/b...   \n",
       "1456  https://shakespeareandco.princeton.edu/books/b...   \n",
       "1198  https://shakespeareandco.princeton.edu/books/l...   \n",
       "256   https://shakespeareandco.princeton.edu/books/c...   \n",
       "768   https://shakespeareandco.princeton.edu/books/c...   \n",
       "810   https://shakespeareandco.princeton.edu/books/s...   \n",
       "508   https://shakespeareandco.princeton.edu/books/l...   \n",
       "814   https://shakespeareandco.princeton.edu/books/s...   \n",
       "1344  https://shakespeareandco.princeton.edu/books/d...   \n",
       "639   https://shakespeareandco.princeton.edu/books/b...   \n",
       "1285  https://shakespeareandco.princeton.edu/books/s...   \n",
       "1202  https://shakespeareandco.princeton.edu/books/r...   \n",
       "499   https://shakespeareandco.princeton.edu/books/w...   \n",
       "71    https://shakespeareandco.princeton.edu/books/g...   \n",
       "242   https://shakespeareandco.princeton.edu/books/y...   \n",
       "729   https://shakespeareandco.princeton.edu/books/a...   \n",
       "202   https://shakespeareandco.princeton.edu/books/a...   \n",
       "1261  https://shakespeareandco.princeton.edu/books/f...   \n",
       "\n",
       "                                                sc_info  killen_match  \\\n",
       "592                 Peking Picnic by Bridge, Ann (1932)             0   \n",
       "244         Precious Bane: A Novel by Webb, Mary (1924)             0   \n",
       "1193     Whom God Hath Joined by Bennett, Arnold (1906)             0   \n",
       "1456                    The Vodi by Braine, John (1959)             0   \n",
       "1198               Men in War by Latzko, Andreas (1918)             0   \n",
       "256    Murder in Mesopotamia by Christie, Agatha (1936)             0   \n",
       "768                    The Bridge by Crane, Hart (1930)             0   \n",
       "810             Tortilla Flat by Steinbeck, John (1935)             0   \n",
       "508          Nonsense Novels by Leacock, Stephen (1920)             0   \n",
       "814   Travels with a Donkey in the Cévennes by Steve...             0   \n",
       "1344     Pictures from Italy by Dickens, Charles (1846)             0   \n",
       "639                 The Ghost by Bennett, Arnold (1907)             0   \n",
       "1285  Easter and Other Plays by Strindberg, August (...             0   \n",
       "1202  The Narrow Land: Folk Chronicles of Old Cape C...             0   \n",
       "499                       Salomé by Wilde, Oscar (1891)             0   \n",
       "71         The Country House by Galsworthy, John (1907)             1   \n",
       "242              So Red the Rose by Young, Stark (1934)             1   \n",
       "729       The Caravaners by Arnim, Elizabeth von (1909)             0   \n",
       "202        Sense and Sensibility by Austen, Jane (1811)             0   \n",
       "1261  The Future of an Illusion by Freud, Sigmund (1...             0   \n",
       "\n",
       "      raphael_match  de_marcilly_match  \n",
       "592               1                  0  \n",
       "244               1                  0  \n",
       "1193              0                  0  \n",
       "1456              0                  0  \n",
       "1198              0                  0  \n",
       "256               0                  1  \n",
       "768               0                  0  \n",
       "810               0                  0  \n",
       "508               0                  0  \n",
       "814               0                  0  \n",
       "1344              0                  0  \n",
       "639               0                  0  \n",
       "1285              0                  0  \n",
       "1202              0                  0  \n",
       "499               0                  0  \n",
       "71                0                  1  \n",
       "242               1                  0  \n",
       "729               0                  0  \n",
       "202               0                  0  \n",
       "1261              0                  0  "
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_df.sample(20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df.to_csv('cp-centrality-readers.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [],
   "source": [
    "total_num_df = pd.DataFrame.from_dict(sc_book_uri_to_num_events, orient = \"index\").reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/e...</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/h...</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/l...</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/m...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/s...</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5878</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/m...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5879</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/i...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5880</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/o...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5881</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/b...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5882</th>\n",
       "      <td>https://shakespeareandco.princeton.edu/books/a...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5883 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  index   0\n",
       "0     https://shakespeareandco.princeton.edu/books/e...  17\n",
       "1     https://shakespeareandco.princeton.edu/books/h...  28\n",
       "2     https://shakespeareandco.princeton.edu/books/l...  28\n",
       "3     https://shakespeareandco.princeton.edu/books/m...   5\n",
       "4     https://shakespeareandco.princeton.edu/books/s...   2\n",
       "...                                                 ...  ..\n",
       "5878  https://shakespeareandco.princeton.edu/books/m...   1\n",
       "5879  https://shakespeareandco.princeton.edu/books/i...   1\n",
       "5880  https://shakespeareandco.princeton.edu/books/o...   1\n",
       "5881  https://shakespeareandco.princeton.edu/books/b...   1\n",
       "5882  https://shakespeareandco.princeton.edu/books/a...   1\n",
       "\n",
       "[5883 rows x 2 columns]"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_num_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "index    https://shakespeareandco.princeton.edu/books/e...\n",
       "0                                                    21873\n",
       "dtype: object"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_num_df.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({2: 197, 0: 231, 1: 146, 3: 371, 4: 566})"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from collections import Counter\n",
    "Counter(new_df['layer'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [],
   "source": [
    "core_books = new_df[new_df['layer'] == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(231, 18)"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "core_books.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({1: 231})"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Counter(core_books[\"killen_match\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({0: 107, 1: 124})"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Counter(core_books[\"raphael_match\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({1: 57, 0: 174})"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Counter(core_books[\"de_marcilly_match\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "layer\n",
       "0    231\n",
       "1    146\n",
       "2      0\n",
       "3      0\n",
       "4      0\n",
       "Name: killen_match, dtype: int64"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_df.groupby('layer')['killen_match'].sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "layer\n",
       "0    124\n",
       "1     10\n",
       "2    149\n",
       "3      0\n",
       "4      0\n",
       "Name: raphael_match, dtype: int64"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_df.groupby('layer')['raphael_match'].sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "layer\n",
       "0    57\n",
       "1    32\n",
       "2    45\n",
       "3    35\n",
       "4     0\n",
       "Name: de_marcilly_match, dtype: int64"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_df.groupby('layer')['de_marcilly_match'].sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df[\"combined_readers\"] = new_df[\"killen_match\"] + new_df[\"raphael_match\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({1: 392, 2: 134, 0: 985})"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Counter(new_df[\"combined_readers\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Correlations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "readers_df = pd.read_csv('cp-centrality-readers.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "readers_small_df = readers_df[[\"coreness\", \"degree_centrality\", \"between_centrality\", \"eigenvector_centrality\", \"killen_match\", \"raphael_match\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-5-57adca1be2ed>:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  readers_small_df[\"combined_readers\"] = readers_small_df[\"killen_match\"] + readers_small_df[\"raphael_match\"]\n"
     ]
    }
   ],
   "source": [
    "# create new column with combination of killen and raphael\n",
    "readers_small_df[\"combined_readers\"] = readers_small_df[\"killen_match\"] + readers_small_df[\"raphael_match\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "readers_small_df = readers_small_df.rename(columns = {\"coreness\": \"Coreness\", \"degree_centrality\": \"Degree Centrality\", \"between_centrality\": \"Betweenness Centrality\", \"eigenvector_centrality\": \"Eigenvector Centrality\", \"killen_match\": \"Killen\", \"raphael_match\": \"Raphael\", \"combined_readers\": \"Killen and Raphael\"})\n",
    "readers_small_df = readers_small_df[[\"Coreness\", \"Degree Centrality\", \"Betweenness Centrality\", \"Eigenvector Centrality\", \"Killen and Raphael\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "reader_corr = readers_small_df.corr(method='spearman')\n",
    "mask = np.triu(np.ones_like(reader_corr, dtype=bool))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvoAAAKvCAYAAAAbXGuRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd1zVZf/H8RfgQBniwAkKqbkAc4EDBEeuUhTr1px3WmqOLHOApallhZrcKCbukVqmaaaGpVlqmiNXmj/NRAS3iTIUB3B+fwCnToBCaerX9/PxOI9H5/qO6/oeurvf38+5vtexMplMJkRERERExFCsH/QARERERETk3lPQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERA1LQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERA1LQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERA1LQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERA1LQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERA1LQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERA1LQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERA1LQFxERERExIAV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSAFfRERERERAyrwoAcg98bBgwdZvHgxP/30E1euXKFMmTL4+fnRv39/ypQp86CHJyIiIiL/MiuTyWR60IOQf2bRokWEhobSuHFjOnbsiLOzMydOnGDu3LncunWLJUuW4Obm9qCHKSIiIiL/IgX9R9zevXvp0aMHvXv3Jjg42GLbhQsXCAwMpHr16ixcuPDBDFBEREREHghN3XnEzZs3DycnJ15//fVs28qUKUNwcDAXLlwgNTUVgCVLlrBixQri4uJwdnbmueeeo1+/ftjY2ADQs2dPypcvz7Vr19ixYwe+vr5MmzaNGzduEB4ezvr167ly5QqVK1dmyJAhtGjRwtxf8+bNCQoKIjk5mS+//JJr165Rv359xo4dS6VKlcz77dmzh//9738cPnwYW1tbnn76aUaOHImjoyMA6enphIeHs3btWi5evEjp0qV59tlnGTJkCAULFgRg3bp1zJ49m5iYGOzs7GjSpAkjRozQNCURERGRTKroP8JMJhO1a9emZcuWTJ069a77jxo1ivXr1zNgwADq1KnDvn37mDVrFh06dOC9994DMoL+vn37aNeuHUFBQQA0bNiQl19+mf379/Pqq6/i7u5OVFQUq1evJiIigpYtWwIZQT8xMZF69erRrVs3EhISmDhxIpUrV2bZsmVARsh/8cUXady4Md26dePy5cuEhYVRrlw5PvnkEwoUKMCsWbOYN28ewcHBuLi4cPDgQcLCwhg4cCCDBw9m79699OzZk4EDB+Lt7c25c+eYPHky7u7ufPzxx/fp0xYRERF5tKii/wi7cuUKN2/epHz58nfd9/jx43zxxReMHDmSvn37AtCkSRNsbW2ZMmUK//3vf3nyyScBKFCgAO+88w62trYAbN++nW3btjFt2jRat24NQNOmTUlMTGTy5MnmoA/g5OTERx99ZP6GIDY2lunTp5OUlISDgwMffvghlStXJjIyEmvrjEWfatasSadOnfjqq6/o0KEDu3fvxsPDw3yj4e3tTZEiRXBwcAAypivZ2trSr18/ChUqZO730KFDmEwmrKys/vFnKyIiIvKo0/Kaj7CsMJ2WlnbXfffs2QPAs88+a9HeoUMHi+0AFStWNId8gB9//BEbGxuaNm1Kamqq+dW8eXNiYmI4ffq0ed/atWubxwVQtmxZAK5fv05KSgoHDx4kICCA9PR083mqVq1K+fLl2bFjBwA+Pj5s376dbt26MXfuXH777Td69OhBYGAgAA0aNCAlJYX27dvz4Ycf8tNPP+Hr68vgwYMV8kVEREQyqaL/CCtWrBh2dnacPXs2132Sk5MBSEhIAKBkyZIW27PeJyUlZWvLcvXqVdLS0njqqady7OPixYu4uLgAWNwgAOaqvclkIjExkfT0dCIjI4mMjMzxPAAvvfQSdnZ2fP7550yZMoXJkydTtWpV3nrrLRo2bEidOnWYPXs2CxcuZMGCBcyePZtSpUoxYMAAevbsmetnISIiIvI4UdB/xPn6+rJr1y5u3rxJ4cKFs21fuHAhH330kXlFnsuXL1s8sHrp0iUAihcvnmsfDg4OODg4sGDBghy3u7u752msdnZ2WFlZ0adPH9q2bZvjdsi4OejevTvdu3fn8uXLbNmyhcjISF599VW2b99OwYIF8fPzw8/Pj5SUFHbu3MnixYt59913qVOnDh4eHnkaj4iIiIiRaerOI+7FF1/k6tWrhIeHZ9t29uxZli5dipeXF40aNQIyVqv5s6z39erVy7WPBg0akJSURIECBfD09DS/fv75Z2bOnJnn6TL29vbUrFmTmJgYi/O4u7vzv//9j4MHDwLQrVs33n33XSDj24WgoCC6d+9OQkICKSkpTJ48meeeew6TyUSRIkVo1qwZo0aNAuD8+fN5GouIiIiI0ami/4irU6cOgwYNIiIigujoaAIDA3FycuLo0aPMmzcPa2trJk+ejKurKx06dCAsLIyUlBTq1KnD/v37iYyMJDAwkCpVquTaR0BAAHXr1mXAgAEMHDgQNzc39u3bx4wZM3j22WfNlfi8GDp0KAMGDCA4OJh27dpx69Yt5syZw6+//moO697e3syZM4dSpUpRp04dLly4wIIFC2jUqBGOjo40btzYvCpPhw4duH37NnPnzqV48eJ4e3v/489URERExAi0vKZBbN68maVLl3Ls2DESExMpV64cfn5+9OvXj9KlSwOQmppKZGQkq1at4uLFi5QvX57OnTvz0ksvWayjb2Njk+0HtpKTkwkPD2fDhg1cuXKFcuXKERgYSP/+/c1r2zdv3pxGjRoxceJE83GrVq0iJCSELVu2mB/M3b59OxERERw5coTChQvj6enJa6+9hqenJ5DxcPHMmTNZs2YN58+fx8HBgRYtWvDGG2/g5OQEwFdffcXcuXM5efIkVlZW1KtXjxEjRphXDhIRERF53Cnoi4iIiIgYkOboi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiQgr6IiIiIiAEp6IuIiIiIGJCCvoiIiIiIASnoi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiQgr6IiIiIiAEp6IuIiIiIGJCCvoiIiIiIASnoi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiQgr6IiIiIiAEp6IuIiIiIGJCCvoiIiIiIASnoi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiQgr6IiIiIiAEp6IuIiIiIGJCCvoiIiIiIASnoi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiQgr6IiIiIiAEp6IuIiIiIGJCCvoiIiIiIASnoi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiQgr6IiIiIiAEp6IuIiIiIGJCCvoiIiIiIASnoi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiQgr6IiIiIiAEp6IuIiIiIGJCCvoiIiIiIARV40AMQeZCKtJr8oIfwWEv5ZsSDHoKIiIhhqaIvIiIiImJACvoiIiIiIgakoC8iIiIiYkAK+iIiIiIiBqSgLyIiIiJiQAr6IiIiIiIGpKAvIiIiImJACvoiIiIiIgakoC8iIiIiYkAK+iIiIiIiBqSgLyIiIiJiQAr6IiIiIiIGpKAvIiIiImJACvoiIiIiIgakoC8iIiIiYkAK+iIiIiIiBqSgLyIiIiJiQAr6IiIiIiIGpKAvIiIiImJACvoiIiIiIgakoC8iIiIiYkAK+iIiIiIiBqSgLyIiIiJiQAUe9ABERERERB4WReoMztf+Kfsj7tNI/jkFfRERERGRLFbGmfCioC8iIiIiksXK6kGP4J5R0BcRERERyaKKvoiIiIiIAamiLyIiIiJiQKroi4iIiIgYkCr6IiIiIiIGpIq+iIiIiIgBqaIvIiIiImJAquiLiIiIiBiQKvoiIiIiIgakir6IiIiIiAGpoi8iIiIiYkCq6IuIiIiIGJCCvoiIiIiIAVlr6o6IiIiIiPGooi8i95Kvpwvv9GmKZ2VnEpJvsmTjL7z78XZup6bneszT9d14s0cTvCo7czX5Jut3nmDcgm1cTkzJcX8bayu2TOtBWlo6/kOX3q9LERERebQZ6GFc49yyyANhMpkM2de/qd6TZVn7/vOcj79Gt3e+ZMbqfQztXJ8PB7bI9ZhnGlbmi3efw2Qy8eIH6xkS/g3VXEvwfXh37IsUzPGY0T0aU+/JsvfrMkRERIzByjp/r4fYwz26v6lnz55Uq1bN/KpRowb16tWjS5curFy50pCB8eDBg7zxxhv4+/vj5eXF008/zYQJE7hw4cJ96S8pKYng4GB++umne3K+atWq8dFHHwGwa9cuqlWrZj73hQsX6N+/P2fOnLknfT1sxvb25fjpK7zwzhq+2XOSqSt2EzLne/q09aJiGcccjxnT25eT567SdtRnrNl+nPU7TxD45koKF7Thtee8s+3foHo5hv3Hm3OXk+/35YiIiDzarKzy93qIGTLoA3h6erJ8+XKWL1/Oxx9/TGhoKG5ubrz55ptMnDjxQQ/vnlq0aBEvvPACCQkJjBgxgjlz5vDiiy/y/fff07lzZ2JiYu55n8eOHWP16tWkp+c+teTvqlWrFsuXL6d69eoA7Ny5k++///6e9/MwKFTQBv/arny5/bhF++dbjmFjY00b7ydyPK5GxZJs2hfDjVup5raUm6nsOXqOZxpVtti3SOECzBvZjv+t3MPx0/H3/iJERESMxEAVfcPO0be3t+epp56yaGvZsiXOzs7MmTOHNm3aUL9+/Qc0untn7969fPDBB/Tu3Zvg4GBzu4+PDy1atCAwMJBx48axcOHCBzfIfMrpb2dU7mWLUbhQgWwB/OLV6yReu0l115I5Hvd7wnUqlSmWrf2J8k64l3OyaHu/XwDXb6Yy8eMdrP/g+Xs3eBERESN6yKv0+fFw34bcBwMGDMDW1pbly5eb29LT04mMjKRly5Z4eHjQpk0bVqxYYXGcyWRi1qxZNGvWDC8vL/r06cMXX3xBtWrVOH36NADBwcH06dOHMWPGUK9ePbp27YrJZMrT+QE2btxIUFAQnp6e+Pr6Ehoayq1bt+54PfPmzcPJyYnXX38927YyZcoQHBxMo0aNSE39o/L72Wef0a5dOzw8PGjevDmzZ8+2mM4UHBxM3759WbFiBa1atcLDw4PAwEC2bdsGZEyt6d69OwC9evWiZ8+eQMaUqVGjRjF48GDq1q3Lq6++CkBcXBwjRozA19eXWrVq0bhxY4KDg0lISMjxmv48dWfVqlWMHDkSgBYtWhAcHExoaChPPfUU165dszhuypQp+Pr6kpaWdsfP7GFSzK4wAInXb2bblpxyCwe7Qjket3DDIdp4P8FbPZtQprgdZUvY8UG/AKpXLImd7R9z9J+u70bv1p68NOkrUtPu/bcvIiIihmNtk7/XQ8ywFf3c2Nvb4+Xlxd69e81t48aNY9WqVbzyyivUrl2b7du3M2bMGG7cuGEOsdOnTycyMpL+/ftTt25doqKiGDNmTLbz79q1i4YNGxIREcGNGzewsrLi7bffvuv5165dy/Dhw+nYsSOvvfYasbGxTJ06ldOnTzN9+vQcr8VkMvHDDz/QsmVLChcunOM+HTt2tHg/a9YswsLC6N27N35+fhw6dIhp06YRHx9v8Y3AwYMHOXfuHEOHDsXe3p7w8HBeffVVtm7dSq1atZgwYQJjx45l7Nix+Pj4mI9bt24d7dq1Y8aMGQCkpKTQo0cPSpcuzbhx47C3t2f//v1ERERga2vLuHHj7vj3CggIYMiQIUyfPp2IiAiqVavGrVu3mD9/Phs3bjRfX3p6OmvXrqV9+/bY2Dzc/6P7M+vMtXpze2wkt/aJS3ZgZQVvdPHmzZ6NSUtLZ9W2Y8z/6iA9nvYAoLiDLbPeaMt7S3Zw+OSl+zF8ERER43nIp+Pkx2MX9AFKlizJwYMHATh58iSfffYZI0eOpE+fPgDmqnB4eDjPPZexssm8efPo3bs3Q4cOBcDPz49Lly6xdetWi3OnpqYyfvx4XFxc8nx+W1tbpkyZQrNmzQgNDTWfq2zZsgwaNIi9e/dSr169bNdx5coVbt68Sfny5fN03UlJScycOZPu3bsTEhJiHkvRokUJDQ2lV69e5nMlJSWxevVqXF1dAShatCg9evRg165dtGzZksqVM+aBV6lShSpVqpj7KFCgAO+88w62trYA/PLLL1SoUIFJkyaZP5OGDRty8OBB9uzZc9cxlyhRwjyGGjVqmM9Ru3Zt1qxZYw76O3fu5Pz58wQFBeXps3hYXE3OqOQ7Fs1eubcvUojEa9kr/QDp6SYmLNrO+0t/5IlyTvyekMLlxBTmjmjHlaQbAEx/9WnOXEoi/POfsMm8obDK/DrSxtqKtHTjPZQuIiLyj2nqjnHs3LkTk8lEs2bNSE1NNb+aN29OUlISP//8MwcOHODGjRu0bt3a4th27dplO1/RokXNYTSv54+Ojub8+fM0b97cYh8/Pz8KFizIjh07chx7VuU6r1NV9u/fT0pKSrZ+mjdvTlpaGjt37jTv6+zsbA7YkHHTARkV+jupWLGiOeRDxoO1y5Yto3z58sTExLBlyxbmzZtHdHQ0t2/fztO4c9K5c2d27txpXlVo9erVeHh4ULVq1b99zgch+txVbqemUblCcYv20k5FcbQrzNHYyzke5+vpQusG7txOTedYXLx57fynqpZm3/HzAHT2r0796uVIWD+M5A3DSd4wHD8vV7xrlCd5w3B6PF3r/l6ciIjIo0gP4z7aLly4QJkyZQC4evUqAG3atMlx34sXL5qroCVKlLDYVqpUqWz7/7UtL+cvUCDjzzBmzJgcpwNdvHgxx2OLFSuGnZ0dZ8+ezXE7QHJyxnKK9vb25rFkfbNwp36KFClisS3rM7jbKjslS2Z/eHTBggVERkZy9epVSpUqhYeHB0WKFOH69et3PNedPPPMM7z33nusW7eOrl27smnTJoYPH/63z/eg3Lqdxtaf4wj0fZLQT3aSnlll7+xfjbS0dDbvP5XjcZ38nqSzf3Wq9ZjFzdsZN3qtGrhTy82ZyZ/sAqDJoMXZjpv+WisKFbCh/5QoYs7n/IyEiIjIY+0hD+/58dgF/aSkJH755ReeeeYZABwcHABYsmSJRSU6i4uLC7/99hsAly9fpmLFiuZtly/nXG39s7yc/9KljPnTISEhOU7RKV68eLa2LL6+vuzatYubN2/mOE9/4cKFfPTRR0RFRZnHEhYWZlGtz1K6dOm7Xk9+rV27lg8++ICRI0fSqVMn883S0KFDOXLkyN8+r729Pa1atSIqKopy5cqRmprKs88+e6+G/a967+MdfD2lKyvGdWL22v3UdCvF2719Wfj1IaLPZtyceVcvR+L1W+YK/+y1B3ixrReLQp5l1toDPFHeifdfDmDrwVg++/7/ANh3PPtvKCRfv4VtoQI5bhMRERHu+9SddevWMXPmTOLi4qhQoQL9+/fP9kzlnx09epTJkyezd+9eChcujL+/P2+88Ya5aH0nxrllyaPZs2dz8+ZNunbtCmBeYjMhIQFPT0/z69y5c0ybNo2UlBRq1KiBvb093377rcW5/vo+J3k5f+XKlSlRogRnzpyx2Kd48eJMmTKFEydO5Hr+F198katXrxIeHp5t29mzZ1m6dCleXl5UqlSJ2rVrU7BgQS5evGjRT2pqKmFhYeYbjrzI6wOve/fupXjx4vTt29cc8q9du8bevXvzvAZ/bn117tyZw4cPs2zZMpo3b06xYtmXm3wU7PjlDM+NXUW5kvZ8+nZHBnasS/jnP/Ha9E3mfbZM60H4kJbm98fi4gl883PKlbRnxfiOjOzqw9z1B+g0ZlWuD/CKiIhIHtzHqTtRUVEMHz6cJk2aMGPGDLy9vRk1ahQbNmzIcf/Y2Fi6d+/O6dOnmTBhApMmTeLSpUu88MILJCYm3rU/w1b0k5OTOXDgAJAxh/3KlSts2rSJ1atX8/LLL1O7dm0AqlevzrPPPsvo0aOJi4ujRo0a/Pbbb0ydOpVatWqZH0598cUXmTlzJra2ttSpU4fNmzebg761de5/5Lye/7XXXmP8+PFYW1vTtGlTEhISmDZtGklJSdSsWTPX89epU4dBgwYRERFBdHQ0gYGBODk5cfToUebNm4e1tTWTJ08GMqYe9enTh7CwMJKTk6lXrx5nz54lLCwMBweHfM1vd3TM+MXW77//nmLFipl/3OqvvLy8+OSTT5g0aRIBAQGcP3+e+fPn8/vvv2ebCpWbrG8iNm7cSNOmTc0PAvv4+FChQgX27NnD7Nmz8zz2h9HXe07y9Z6TuW4v0mpytrZtP8fhP3RpvvppPWL53XcSERF5nN3Hiv7UqVNp27Yto0ePBjIWd0lISCA8PDzHad6LFy8mNTWVBQsWmDNjw4YNadOmDXPnzmXYsGF37M+wQf/QoUN06dIFyJhf7uDggIeHBzNmzKBly5YW+37wwQdERkayZMkSLly4QKlSpXjuuefM68ADDBw4EJPJxPLly5k1axYNGzZkwIABzJgxg6JFi95xLHk5f5cuXbC3t2fu3LksW7YMe3t7GjRowLBhw3B2dr7j+YcMGUKtWrVYunQpEydOJDExkXLlytGmTRv69etnMSXn9ddfx9nZmWXLlhEZGYmTkxN+fn4MGzYs1yU6c/LEE0/QuXNnli5dyg8//MDatWtz3K9Tp06cPn2azz//nCVLllCmTBn8/f3p1q0bY8aM4eTJk7i7u9+xr4YNG9KsWTM+/PBDdu3aRWRkJJDxd/X39+ebb77B19c3z2MXERERydV9mqMfFxdHbGxstnDeunVroqKiiIuLyza1+uTJkzz55JMWKywWLlwYT09PtmzZctegb2Uy6Yv+u7l9+zbr16+nUaNGFvOhJk2axOeff86uXbse4OgeX+np6bRp04a2bdvm+INheZFTpVz+PSnfjHjQQxAREbFQJGhevvZPWdU3T/tt2bKFfv36sWbNGouZEEeOHKFTp07MmTOHpk2bWhzz1ltvsXXrVjZv3mxevAUgKCiImJgY9u3bd8c+DVvRv5cKFixIZGQky5Yto1+/fjg6OnLgwAGWLFnCyy+//KCH99hJSkpi0aJF7N+/nwsXLtCtW7cHPSQRERExCKt8Tt1JTEzMcb68o6OjeaozZOQXyFhQ5M/s7OyAP1ZK/LOOHTuycuVK3nzzTYYOHUrhwoVZvHgxx48fJzU19a5jU9DPo1mzZvHhhx8yZswYkpOTcXV1Zfjw4eZftpV/j62tLZ9++ikmk4n3338/T0+di4iIiORFfoP+okWLiIiIyNY+ePBghgwZYn6fNYnmr+fPas/pmc/69evz3nvv8f777/PFF19gZWXF008/zQsvvMCKFSvuOjYF/TyqVKkS06ZNe9DDEDK+Yfnhhx8e9DBERETEiPL5LG7v3r3p1KlTtvY/V/Phj8VF/lq5v3btmsX2vwoKCiIwMJDY2FgcHBwoVaoUISEhODk53XVsCvoiIiIiIpnyW9H/6xSd3GQtPhIbG0u1atXM7adOnbLY/mcnTpzg8OHDBAYGWmw/cuTIHVdlzPLYraMvIiIiIpIbKyurfL3yqlKlSri4uGRbM/+bb77Bzc3NYmWdLMeOHWPkyJHExcWZ23bt2sXRo0ezrSKZE1X0RUREREQy5beinx+DBg0iJCSEYsWKERAQwObNm4mKiiIsLAyA+Ph4YmNjqVKlCvb29gQEBODi4sKwYcMYMmQI8fHxvP/++9SuXZv27dvftT9V9EVEREREMt2vij5kzLcfP348P/zwA4MGDWL37t2EhobSrl07IOOHSLt06cIvv/wCQNGiRZk7dy7FihXj9ddfZ8qUKbRr1465c+daLLeZ67VoHX15nGkd/QdL6+iLiMjDpli3j/O1f8Kyh3cFRk3dERERERHJdD+n7vzbFPRFRERERDIp6IuIiIiIGJCCvoiIiIiIAVlZK+iLiIiIiBiOKvoiIiIiIgakoC8iIiIiYkAK+iIiIiIiRmScnK+gLyIiIiKSRRV9EREREREDUtAXERERETEgBX0REREREQNS0BcRERERMSLj5HwFfRERERGRLKroi4iIiIgYkIK+iIiIiIgBKeiLiIiIiBiRcXK+gr6IiIiISBZV9EVEREREDEhBX0RERETEgBT0RUREREQMSEFfRERERMSIjJPzsX7QAxAREREReVhYWVnl65Vf69at45lnnsHLy4u2bdvyxRdf3HH/+Ph4QkJC8PX1xdvbm/79+xMTE5OnvhT0RUREREQy3c+gHxUVxfDhw2nSpAkzZszA29ubUaNGsWHDhhz3N5lMDBo0iK1btzJ8+HAmTZrEpUuX6NWrFwkJCXftT1N3REREREQy3c8p+lOnTqVt27aMHj0aAD8/PxISEggPD6dNmzbZ9o+JiWHfvn2EhobSsWNHACpXrkzLli3ZvHkznTp1umN/quiLiIiIiGSytrbK1yuv4uLiiI2NpVWrVhbtrVu3Jjo6mri4uGzH3Lx5EwA7OztzW7FixQC4evXq3a8lz6MTERERETG4+zV1Jzo6GgB3d3eL9kqVKgFw8uTJbMdUr14dHx8fZsyYwYkTJ4iPj+fdd9+laNGitGzZ8q59auqOiIiIiEim/E7dSUxMJDExMVu7o6Mjjo6O5vdJSUkA2NvbW+yXVa1PTk7O8fzjxo3jpZdeol27dgAUKlSIGTNm4OrqetexKeiLiIiIiGTKz3QcgEWLFhEREZGtffDgwQwZMsT83mQyAdnX6c9qt7bOPtHmxIkTdO3alQ8fzXEAACAASURBVIoVKzJ69GhsbW357LPPePXVV5k7dy7169e/49gU9EVEREREMuW3ot+7d+8cH4r9czUfwMHBAcheub927ZrF9j9buHAhAPPnzzfPzW/SpAndunXjvffeY9WqVXccm4K+iIiIiEim/C6Z+dcpOrnJmpsfGxtLtWrVzO2nTp2y2P5nZ8+epXLlyuaQnzW+evXqsXjx4rv2qYdxRUREREQyWVnl75VXlSpVwsXFJdua+d988w1ubm6UL18+2zHu7u4cP34825r5Bw8epEKFCnftUxV9EREREZFMf+fXbvNq0KBBhISEUKxYMQICAti8eTNRUVGEhYUBGb+CGxsbS5UqVbC3t+e///0vX375JX379qVfv37Y2tqyZs0adu/ebT7mjtdiynoCQERERETkMVf77W/ztf/B8S3ytf+nn37K/PnzOXfuHK6urvTr18/8Y1irVq0iJCSExYsX4+PjA2Q8kDt58mR2796NtbU1Tz75JIMHD6Zx48Z37UtBXx5rjSdtfdBDeKztGNkUgHL9Pn/AI3m8nZvd+UEPQUTkofHUuPwF/QPj8hf0/02auiMiIiIikul+Tt35tynoi4iIiIhkMlDOV9AXEREREcmiir6IiIiIiAEZKOcr6IuIiIiIZFFFX0RERETEgAyU8xX0RURERESyqKIvIiIiImJABsr5CvoiIiIiIllU0RcRERERMSAD5XwFfRERERGRLKroi4iIiIgYkLW1gr6IiIiIiOGooi8iIiIiYkAGyvkK+iIiIiIiWVTRFxERERExIAPlfAV9EREREZEsquiLiIiIiBiQgXK+gr6IiIiISBZrAyV9BX0RERERkUwGyvkK+iIiIiIiWTRHX0RERETEgAz0w7gK+iIiIiIiWVTRFxERERExoPud89etW8fMmTOJi4ujQoUK9O/fn44dO+a4b3BwMKtXr871XMeOHbtjXwr6IiIiIiKZrLh/ST8qKorhw4fTq1cv/Pz82LRpE6NGjcLW1pY2bdpk23/gwIF07drVou3UqVMEBwfzn//85679KeiLiIiIiGS6n3P0p06dStu2bRk9ejQAfn5+JCQkEB4enmPQr1ixIhUrVjS/T0tL45133qF69eq8+eabd+3P+t4NXURERETk0WZlZZWvV17FxcURGxtLq1atLNpbt25NdHQ0cXFxdz3Hp59+ypEjRxg/fjyFChW66/6q6IuIiIiIZMrvHP3ExEQSExOztTs6OuLo6Gh+Hx0dDYC7u7vFfpUqVQLg5MmTuLq65trPtWvXmDZtGoGBgXh5eeVpbAr6IiIiIiKZ8vvLuIsWLSIiIiJb++DBgxkyZIj5fVJSEgD29vYW+9nZ2QGQnJx8x34+//xzEhMT6d+/f57HpqAvIiIiIpIpvxX93r1706lTp2ztf67mA5hMpszzW+XYbm195xn1S5cupUWLFtm+EbgTBX0RERERkUz5XUf/r1N0cuPg4ABkr9xfu3bNYntOjh49SkxMDMOHD8/X2PQwroiIiIhIJiur/L3yKqsSHxsba9F+6tQpi+05+f777ylatCj+/v75uhYFfRERERGRTNZWVvl65VWlSpVwcXFhw4YNFu3ffPMNbm5ulC9fPtdjDxw4gIeHR55W2vkzTd0REREREcmU34dx82PQoEGEhIRQrFgxAgIC2Lx5M1FRUYSFhQEQHx9PbGwsVapUsXho99dff813NR8U9EVEREREzO7nD2YFBQVx69Yt5s+fz4oVK3B1dSU0NJR27doBGVN0QkJCWLx4MT4+PubjLl++nKfnAP5KQV9EREREJFN+H8bNr65du9K1a9cctwUFBREUFJSt/eDBg3+rLwV9EREREZFM9znn/6sU9EVEREREMt3viv6/SUFfRERERCTT/Zyj/29T0BcRERERyaSKvojcU0+5FuOVpm5UcbYn+WYqXx2+wLztp0hNN+W4/46RTXM919mrN3hu9m7z+6drONPd25VKJYty9fptvvv1ErO3xXDjdvo9v45HXaMnSxHSyYNaLsVIuH6bFT+eYsraI9xOy/nvAFC1rANvdfak3hMlANj92+9MWHmImEvX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1K5dmz///JMNGzbg5+cHQGhoKMHBwRQpUgRHR0eaNWvGggUL+Oyzz/D19cXe3p5FixZx5swZfv7556fuTyP6IiIiIiIvQbNmzRg6dCi7d++me/fuHDhwgNGjR9OoUSMAtm/fzocffsjJkycByJo1KwsXLqRYsWIMGzaMXr16ERMTw7x58/Dy8nrq/iwSky/1FXkNZao3Mr278FqL3pp0Z8BM5Xukc09eb9F/J80WUay/6Vuwy8txZkzKu2KKiPx/aERfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmyCIxMTExvTshIiIiIiLPl0b0RURERETMkHV6d0AkPeX3XZ3eXXitBU96D4Ci/Tamc09eb2fHegMwfmdgOvfk9fZ5zUL6THoFJH8uiZgDjeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMWad3B0QEvIq8wYB3S1LqTWfCou/z64FL+K0P4H58YqrrFMnlyJdNSlHeLRsABwNDGbHyFBdvRhqWcbK35ovGJfAu60o2BxtOXg7Db0MAu07/+8KPKSPyLJSNL3yKUSKPE2HRcaw4dIVJf5x74vtQOKcD/RsXp1z+rAAcunCb0WsDCL4VZXL5UnmcWO5bhXfH7yHw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Pi8vLwICAtK7GyIiIiLyBBrRFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETOkoC8iIiIiYoYU9EVEREREzJCCvoiIiIiIGVLQFxERERExQwr6IiIiIiJmSEFfRERERMQMKeiLiIiIiJghBX0RERERETNkkZiYmJjenRARERERkedLI/oiIiIiImZIQV9ERERExAwp6IuIiIiImCEFfRERERERM6SgLyIiIiJihhT0RURERETMkIK+iIiIiIgZUtAXERERETFDCvoiIiIiImZIQV9ERERExAwp6IuIPKPExMT07oIAYWFh6d0FQb8PIhmB1ZAhQ4akdydERDKCmjVrEhoaSq5cuXBxcUnv7ry23nrrLc6ePUvmzJnJnz8/FhYW6d2l15J+H0RefRaJ+koukmGdOnWKa9eu4eXlhaOjY3p3x+yNGzeOtWvXcuPGDdzd3WnevDmNGzfGyckpvbv2WlmyZAmrVq3i6NGj5MiRg/fff5/333+fwoULp3fXXiv6fUg/pUuXTtMX3BMnTrzA3sirTEFfJIMICQmhX79+eHl50a1bNxYuXMiIESNITEzExcWF+fPnU6RIkfTuptlLTExk7969rFixgi1btpCQkEDdunVp2rQpNWrU0OjyS3ThwgVWrlzJmjVruHLlCh4eHjRr1kxh8yXS70P6mDRpUppe2x49erzA3sirTEFfJIPo168fe/fuZdSoUVSrVo2aNWtSvHhx+vXrx/Dhw3F0dGT69Onp3c3XSlRUFNu3b2fJkiUcOnSIHDly0Lx5c1q2bEnOnDnTu3uvlaNHj/LDDz9w6NAhbG1tadiwIR06dKBkyZLp3bXXhn4fRF49uhhXJIPYs2cPAwYMoEaNGhw5coSbN2/Stm1bSpQowSeffMKhQ4fSu4uv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\n",
      "text/plain": [
       "<Figure size 792x648 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.set_theme(style=\"white\", font_scale=1.5)\n",
    "f, ax = plt.subplots(figsize=(11, 9))\n",
    "sns_plot = sns.heatmap(reader_corr, mask=mask,  cmap=\"Blues\", annot=True, vmin=0.3,\n",
    "            square=True, linewidths=.5, cbar_kws={\"shrink\": .5}, annot_kws={\"fontsize\":17})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "if not os.path.exists('./figures'):\n",
    "    os.makedirs('./figures')\n",
    "figure = sns_plot.get_figure()    \n",
    "figure.savefig('./figures/readers_corr.png', dpi=300,bbox_inches='tight')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
